import { reactive } from 'vue';

import {
  defineOverridesPreferences,
  updatePreferences,
} from '@vben/preferences';

import { message } from 'ant-design-vue';

import { queryParamsByFieldNameApi } from '#/api';
import { getOneSpliceSepPrefix } from '#/utils';

// 初始化默认配置
const defaultOverrides = reactive({
  // overrides
  app: {
    // 名称
    name: import.meta.env.VITE_APP_TITLE,
    // 权限后端访问控制
    accessMode: 'backend',
    // 菜单布局：双列
    layout: 'sidebar-mixed-nav',
  },
  // 图标
  logo: {
    // 是否开启图标
    enable: true,
    // 图标资源
    source: undefined,
  },
  // 主题
  theme: {
    // 浅色
    mode: 'light',
    // 颜色 天蓝色
    builtinType: 'sky-blue',
  },
  // 动画
  transition: {
    /** 页面切换动画 */
    name: 'fade-up',
  },
  // 版权配置
  copyright: {
    /** 版权是否可见 */
    enable: false,
  },
  // 功能配置
  widget: {
    // 是否启用语言切换部件
    languageToggle: false,
    /** 是否显示通知部件 */
    notification: false,
  },
});

/**
 * @description 项目配置文件
 * 只需要覆盖项目中的一部分配置，不需要的配置不用覆盖，会自动使用默认配置
 * !!! 更改配置后请清空缓存，否则可能不生效
 */
export const overridesPreferences =
  defineOverridesPreferences(defaultOverrides);

// 异步获取配置的函数
export async function fetchAndApplyConfig() {
  try {
    const result = await queryParamsByFieldNameApi({
      fieldNames: 'appName,appLogo',
    });
    await reflectionPreferences(result);
  } catch (error) {
    message.error(`配置加载失败${error}`);
  }
}

async function reflectionPreferences(result: any) {
  // 标题
  defaultOverrides.app.name = result?.appName;
  // LOGO
  defaultOverrides.logo.source = getOneSpliceSepPrefix(result?.appLogo);
  // 更新主题app偏好设置初始化
  await updatePreferences(overridesPreferences);
}
